"use strict";

var scope=require("./scope");
var util=require("./util");
var method=require("./method");
var yaml=require('./yaml');

var test={
  'q': 'qwerty',
  'a': 'apple',
  'b': 'baby',
  'x': 1,
  'y': 2,
  'o': {
    'a': 'aardvark',
    'z': 3,
    'o2': {
      'a': 'avacado',
      'b': 'boat',
      'i': 4
    }
  },
  'f': {
    'type': 'method',
    'params': [],
    'code': []
  }
}

var t=scope.treeToScope(test);
console.log(t);
var o=util.lookup(t, ['o']);
console.log('o');
console.log(o);
console.log(o.q);
console.log(o.a);
console.log(o.b);
console.log(o.x);
console.log(o.y);
console.log(o.z);

var o2=util.lookup(t, ['o', 'o2']);
console.log('o2');
console.log(o2);
console.log(o2.q);
console.log(o2.a);
console.log(o2.b);
console.log(o2.x);
console.log(o2.y);
console.log(o2.z);
console.log(o2.i);

var o3=scope.activate(t, ['o', 'o2'], {});
console.log('o3');
console.log(o3);
console.log(o3.q);
console.log(o3.a);
console.log(o3.b);
console.log(o3.x);
console.log(o3.y);
console.log(o3.z);
console.log(o3.i);

var o4=scope.activate(t, ['o', 'o2'], {'x': 5});
console.log('o4');
console.log(o4);
console.log(o4.q);
console.log(o4.a);
console.log(o4.b);
console.log(o4.x);
console.log(o4.y);
console.log(o4.z);
console.log(o4.i);

var f=scope.activate(t, ['f'], {});
console.log('f');
console.log(f);
console.log(f.params);
console.log(f.code);
console.log(f.scope);
console.log(f.scope.q);
console.log(f.scope.a);
console.log(f.scope.b);
console.log(f.scope.x);
console.log(f.scope.y);

method.call(f, [], {});
